import axios from 'axios';
import Cookies from 'js-cookie';
import router from '@/router';
import qs from 'qs';
import { clearLoginInfo } from '@/utils';
import isPlainObject from 'lodash/isPlainObject';

const http = axios.create({
  baseURL: window.SITE_CONFIG['apiURL'],
  timeout: 1000 * 600,
  withCredentials: true,
});

/**
 * 请求拦截
 */
http.interceptors.request.use(
  (config) => {
    let language;
    config.headers['Accept-Language'] = Cookies.get('language') || 'zh-CN';
    config.headers['token'] = Cookies.get('token') || '';
    if (localStorage.getItem('lang') == 'en') {
      language = 'en_US';
    } else if (localStorage.getItem('lang') == 'cn') {
      language = 'zh_CN';
    } else if (localStorage.getItem('lang') == 'pt') {
      language = 'pt_PT';
    }
    config.headers['language'] = language || '';
    // 默认参数
    var defaults = {};
    // 防止缓存，GET请求默认带_t参数
    if (config.method === 'get') {
      config.params = {
        ...config.params,
        ...{ _t: new Date().getTime() },
      };
    }
    if (isPlainObject(config.params)) {
      config.params = {
        ...defaults,
        ...config.params,
      };
    }
    if (isPlainObject(config.data)) {
      config.data = {
        ...defaults,
        ...config.data,
      };
      if (/^application\/x-www-form-urlencoded/.test(config.headers['content-type'])) {
        config.data = qs.stringify(config.data);
      }
    }

    return config;
  },
  (error) => {
    return Promise.reject(error);
  },
);

/**
 * 响应拦截
 */
http.interceptors.response.use(
  (response) => {
    if (response.data.code == 401 || response.data.code == 10001) {
      setTimeout(() => {
        clearLoginInfo();
        router.replace('login');
        return Promise.reject(response.data.msg);
      }, 1500);
    }
    return response;
  },
  (error) => {
    console.error(error);
    return Promise.reject(error);
  },
);

export default http;

// import axios from 'axios'
// import { Notification, MessageBox } from 'element-ui'
// // import store from '../store'
// import { getToken } from '@/utils/auth'
// import Config from '@/settings'

// // 创建axios实例
// const service = axios.create({
//   baseURL: process.env.NODE_ENV === 'production' ? process.env.VUE_APP_BASE_API : '/', // api 的 base_url
//   timeout: Config.timeout // 请求超时时间
// })

// // request拦截器
// service.interceptors.request.use(
//   config => {
//     if (getToken()) {
//       config.headers['Authorization'] = getToken() // 让每个请求携带自定义token 请根据实际情况自行修改
//       config.headers['Accept-Language'] = Cookies.get('language') || 'zh-CN'
//     }
//     config.headers['Content-Type'] = 'application/json'
//     return config
//   },
//   error => {
//     Promise.reject(error)
//   }
// )

// // response 拦截器
// service.interceptors.response.use(
//   response => {
//     const code = response.status
//     if (code < 200 || code > 300) {
//       Notification.error({
//         title: response.message
//       })
//       return Promise.reject('error')
//     } else {
//       //console.log("response:"+JSON.stringify(response.data))
//       return response.data
//     }
//   },
//   error => {
//     let code = 0
//     try {
//       code = error.response.data.status
//     } catch (e) {
//       if (error.toString().indexOf('Error: timeout') !== -1) {
//         Notification.error({
//           title: '网络请求超时',
//           duration: 5000
//         })
//         return Promise.reject(error)
//       }
//     }
//     if (code) {
//       if (code === 401) {
//         MessageBox.confirm(
//           '登录状态已过期，您可以继续留在该页面，或者重新登录',
//           '系统提示',
//           {
//             confirmButtonText: '重新登录',
//             cancelButtonText: '取消',
//             type: 'warning'
//           }
//         ).then(() => {
//           store.dispatch('LogOut').then(() => {
//             location.reload() // 为了重新实例化vue-router对象 避免bug
//           })
//         })
//       } else if (code === 403) {
//         router.push({ path: '/401' })
//       } else {
//         const errorMsg = error.response.data.message
//         if (errorMsg !== undefined) {
//           Notification.error({
//             title: errorMsg,
//             duration: 5000
//           })
//         }
//       }
//     } else {
//       Notification.error({
//         title: '接口请求失败',
//         duration: 5000
//       })
//     }
//     return Promise.reject(error)
//   }
// )
// export default service
